###### # # ####### ### # ##### # # # # # # # # # # # # # # # # # # # # # # ###### # # # # # ##### # # # # # # # # # # ####### # # # # # # # # # # # # ##### # ### ####### ##### # (freeware) Contents -------- 1 Introduction 2 Legal stuff 3 What is available? 4 Technical notes 5 The user interface 6 Source code availability 7 Credits 8 Revision history 9 How to contact me 1 Introduction --------------- This software is a part of version 4 of Rickis little useful (?) DOS utilities. After version 3 I decided to split them up and distribute the stuff in smaller packages (mainly because the file became too big). If you have comments or suggestions, please contact me. You find my address at the end of this document. All programs were programmed with Turbo Pascal 6.0 on a 286 AT compatible machine using Norbert Juffas TURBO.TPL replacement, version TPL60N19. Each of them is tested to a reasonable level of stability (I use them myself :-) ). If you have problems, please contact me. I suppose you need at least DOS 3.x to run everything successfully. RUTILS ran without problems on the following platforms: Original IBM AT 286, MS-DOS 3.3 AT 286-20 NEAT, AMI Bios, MS-DOS 3.3 AT 286-20 NEAT, AMI Bios, MS-DOS 5.0 AT 286-20 NEAT, AMI Bios, DR-DOS 6.0 AT 386 NEAT, AMI Bios (10/89), MS-DOS 5.0 AT 486, AMI Bios, MS-DOS 5.0 After RUTILS3 was out, several people kindly reported some bugs to me. There were some which could be fixed immediately. One bug, however, was a bit harder to find. Some debug sessions later I found that DR-DOS and MS-DOS are not as compatible as they should be. This version has been tested with both MS-DOS and DR-DOS. None of my TSRs caused any problems. On PCs with a 80486 chip, it may happen that one of the programs crashes. This has nothing to do with my software (at least I hope so :-)). The effect is that the PC hangs and must be rebooted. If you start the program in a Windows DOS box, a weird error message is displayed and the computer must be rebooted. If you use the DOS DEBUG command to start the program, everything runs fine. What makes me think that the problem has nothing to do with my software is the fact that (a) I can fix the bug by simply adding some few bytes to the executable (eg. by placing some additional spaces in a help screen) and (b) it occured that a program crashed if it had been DIETed, and ran without being compressed and for another program this behaviour could be observed in the opposite way. If anyone has more information about that strange matter, please contact me. The RUTILS package is intended for people who already have the basic knowledge about DOS. You should know how to view and modify text files (if you read this, you appearently know how to view them :-) ), how to redirect a programs output to a file (and how to append it to the target file) and how to use the pipe symbol '|'. I did not include a complete introduction to DOS in every DOC file. For DCAT you must know how to put labels on diskettes, for ASET you must know what shell variables are (and how to view and modify them), GENOUT will only be useful if you program in a shell or in a programming language, and CHMOD requires some knowledge about file attributes. All the programs are a result of my hobby, not my profession. 2 Legal stuff -------------- You are free to use this software if it is not modified in any way and if you give it away for free. You may only charge a minimal fee to cover distribution or diskette costs. The author disclaims all warranties as to this software, whether express or implied, including without limitation any implied warranties of merchantability, fitness for a particular purpose, functionality or data integrity or protection. Phew. For magazines, software distributors, sysops, ftp site administrators... ------------------------------------------------------------------------ If you spread the RUTILS4 software by placing it on a ftp site for public access, or putting it on a diskette for a computer magazine, or making it available in any other way for a large user group, you *must* inform me by email (preferred) or mail. This will allow me to inform you if any substantial modifications have been made since you got the package, and let me have an overview on how the software has been spread. You don't have to register. You don't have to pay. You only have to tell me. 3 What is available? --------------------- The following table gives an overview over what's available and into which categories it falls. Some of the programs are marked with (unix) to show that they are (at least) similar to Unix commands. +-----------------------------------------------------------------------------+ | Text file utilities | +---+---------+---------------------------------------------------------------+ | 1 | CUT | Remove selected fields from each line of a file (unix) | | 1 | DETAB | Change tabs to spaces in several files (unix: expand) | | 1 | ENTAB | Change spaces to tabs in several files (unix: unexpand) | | 1 | FMT | ASCII text formatter (unix) | | 1 | HEAD | Show the first lines of a file (unix) | | 1 | LOCASE | Change chars in several files from upper to lower case | | 1 | MCOL | Arrange text in multiple columns | | 1 | NODUP | Remove successive equal lines from files | | 1 | TAIL | Show the last lines of a file (unix) | | 1 | UPCASE | Change chars in several files from lower to upper case | | 1 | WC | Count words, lines, and chars of several text files (unix) | +---+---------+---------------------------------------------------------------+ | Arbitrary file utilities | +---+---------+---------------------------------------------------------------+ | 2 | CAT | Append several outputs to stdout (unix) | | 3 | FILE | File type guesser (unix) | | 2 | HD | Display hex dumps of several files | | 2 | STRINGS | Find printable strings in an object file or binary (unix) | | 2 | TEE | Duplicate textual output to a file (unix) | +---+---------+---------------------------------------------------------------+ | Directory utilities | +---+---------+---------------------------------------------------------------+ | 4 | L | Display information about files and directories | +---+---------+---------------------------------------------------------------+ | Programming utilities | +---+---------+---------------------------------------------------------------+ | 5 | GENOUT | Generate program fragments for textual output | +---+---------+---------------------------------------------------------------+ | Batch file utilities | +---+---------+---------------------------------------------------------------+ | 6 | ASET | Enhanced SET command | +---+---------+---------------------------------------------------------------+ | Miscellanous utilities | +---+---------+---------------------------------------------------------------+ | 5 | BANNER | Display strings in huge letters (unix) | | 5 | CAL | Display a calendar (unix) | | 5 | CHMOD | Change the attributes of files (unix) | | 7 | DCAT | Disk Cataloger | | 5 | DCALC | Date Calculations | | 5 | NCONV | Number conversion utility | +-----------------------------------------------------------------------------+ The number in the above table stands for the following ZIP files, which can be found at wsmr-simtel20.army.mil (192.88.110.20) in the directories listed below --- At least I plan to place them there. Please check out simtels upload lists for the current state. +---+--------------+---------------+ | 1 | rtextu10.zip | msdos/txtutl | | 2 | rfileu10.zip | msdos/filutl | | 3 | file10.zip | msdos/filutl | | 4 | l11.zip | msdos/dirutl | | 5 | rpgmu10.zip | msdos/pgmutl | | 6 | aset10.zip | msdos/batutl | | 7 | dcat10.zip | msdos/catalog | +---+--------------+---------------+ Each program comes with an uncompressed EXE file and a DOC file which contains additional information. ASET comes with an additional Quick Reference. Each of the above ZIP files contains a copy of this README file and a file DESC.BTM, which is a 4DOS batch file DESCRIBEing the files contained in the ZIP file, as well as a FILE_ID.DIZ description file. Everything as one package can be ftp'd from ftp.informatik.rwth-aachen.de (137.226.112.31) as pub/rutils40.zip. The EXE files in this compilation are compressed with Teddy Matsumotos DIET compressor (see below). 4 Technical notes ------------------ I recommend you get the DIET144 package by Teddy Matsumoto to decrease the size of the EXE files. RUTILS30 had been shipped with packed EXE files, but Keith Peterson pointed out that this causes problems with virus checking. After you checked all EXE files with all your favorite virus checkers, I recommend you execute a DIET *.EXE command to pack them. I know that there are smaller utilities than mine. They are usually written in C or Assembler, not in Turbo Pascal. I do not plan to re-write the utilities in a different language. If my stuff is too big for you, don't use it :-) The following table gives an overview over the programs facilities. +----------+---------+------+-----+----------+-----------+-----+--------------+ | Name | Default | Help | Dbg | Verbose | No Action | Rec | Special | +----------+---------+------+-----+----------+-----------+-----+--------------+ | ASET | -h | -hHv | -* | -pr | -n | | -ef | | BANNER | -h | -hHv | -* | | | | | | CAL | current | -hHv | -* | | | -R | | | | month | | | | | | | | CAT | -h | -hHv | -* | | | | -bcCenst | | CHMOD | current | -hHv | -* | | -n | -R | -cdDf | | | dir | | | | | | | | CUT | -h | -hHv | -* | | | | -cdfis | | DCALC | -h | -hHv | -* | | | | | | DCAT | -h | -hHv | -* | -aq | | | -cfn | | DETAB | -h | -hHv | -* | | | | -ert | | ENTAB | -h | -hHv | -* | | | | -ert | | FILE | -h | -hHv | -* | -0123ang | | -R | -mo | | FMT | -h | -hHv | -* | | | | -#BcCfLnpRs | | GENOUT | -h | -hHv | -* | | | | -bBcCdDeEfF | | | | | | | | | mMpPsS | | HD | -h | -hHv | -* | -q | | | -lnotx | | HEAD | -h | -hHv | -* | -q | | | -# | | L | current | -hHv | | -afVx | | -R | -12458densu | | | dir | | | | | | kKmpr | | LOCASE | -h | -hHv | -* | | | | -ber | | MCOL | -h | -hHv | -* | | | | -cflst | | NCONV | -h | -hHv | -* | -a | | | | | NODUP | -h | -hHv | -* | | | | -bei | | STRINGS | -h | -hHv | -* | -o | | | -#antx | | TAIL | -h | -hHv | -* | -q | | | -# | | TEE | -h | -hHv | -* | | | | -acC | | UPCASE | -h | -hHv | -* | | | | -ber | | WC | -h | -hHv | -* | | | | -clmnuwx | +----------+---------+------+-----+----------+-----------+-----+--------------+ Explanation: Name The name of the program Default The action of the program after invokation w/o arguments Help Switches which provide usage and other information Dbg Debug option which displays some internal runtime details Verbose Switches which control the programs verbosity No Action If specified, these options switch to don't-modify mode Rec Make the program operate for all subdirectories, too Special These switches perform program dependent functions 5 The user interface --------------------- I tried to design a unique user interface for all my utilities. Its features are listed below. * First of all: NEVER try to do something like TEXT.DAT > TEXT.DAT ie., never try to redirect output to the input file. This results in loss of your data file. Instead, rename your input or output file before applying the command, like REN TEXT.DAT TMP.TMP TMP.TMP > TEXT.DAT DEL TMP.TMP That has nothing to do with my programs, but I think, it should be said. * You may rename any of the programs to whatever name you wish. The help pages will recognize the change and update automatically. For bug reports please tell me the 'design name', which is shown in the -v screen, if it differs from your choice (otherwise I probably don't know what you're talking about). * Valid switch characters are '-' and '/'. * A filename '-' stands for input from stdin. This is true for those utilities where input from standard input is meaningful. If you use them as pipes, as eg. in VER | GENOUT - you may omit the filename argument and simply write VER | GENOUT * If you invoke one of the filters like LOCASE - - you must input from the keyboard _two_ times, terminating each input with CTRL/Z. If you combine this with piping, like DIR | LOCASE - - the first - means the input from the pipe (here DIRs output), and the second - means input from the keyboard, terminated with CTRL/Z, as above. * Calling any of the programs without arguments will show a help page, if there is no meaningful application for such an invokation. * The switch characters are case sensitive, ie. -h and -H are two different switches! * Switches may be specified separately, like -a -b -c, or in one turn, like -abc. If switches have arguments, like -b100, they may only appear at the end of (optionally tied-together) switches, ie. -ab100 is the same as -a -b100, whereas -b100a results in 100a as argument to -b. Switches with arguments appear in the help pages with a trailing : In ASET combined options are not allowed, ie. you must specify them one by one, like -a -b -c, not in one turn. * The Errorlevel is set due to the following reasons: 0, if everything worked fine. 1, if an information screen had been displayed. 255, if a fatal error occured. Other settings depend on the tools functionality and are documented in the -H screens. This helps building batch files with the programs (IF ERRORLEVEL 255 GOTO... and so on). * The commandline may contain quoted strings. Quoting characters are ' and ", respectively. The following command line BANNER 'a"a' "b'b" contains 2 arguments, because " will be part of the string in the first ' pair and vice versa. The ! character may be used to unquote ', ", and ! itself. Separators are space and tab characters. Quoted strings without separators in between are concatenated. Therefore BANNER !'a"a' "b'b" has one argument, namely the string >'aa' bb"<. Think about this. Quoting may also be used to specify empty strings '', or "". Missing quotes at the end of the line are filled up appropriately. If you doubt whether one of the programs reads your input correctly, call it with the -* option. It will tell you exactly which options and parameters have been recognized. The above does not apply to ASET, which has its own command line parser. One note for 4DOS users: 4DOS interprets quotes in the command line itself. You must therefore use `'` and `"` to pass the quotes ' and " to programs. * The meta character ! may also be used to pass any ASCII code to the programs. If you want to pass, eg., a character to one of them, simply enter its (decimal) code after the ! character: !13 Note that !n cannot be used within quotes, but you may use something like "Let's pass"!13!10"cr/lf to " If the number after ! exceeds 255, it is interpreted to be more than one character (up to 4 characters can be formed this way). We do not recommend the usage of this feature, however. The above does not apply to ASET, which has its own command line parser. * If not stated otherwise, the order of arguments and switches is arbitrary. Parameter of switches, like -b100 must be appended without blanks (otherwise they are interpreted as names). * Each of the programs, which accepts a list of file names as arguments, does also accept the name of a list file. A list file is by general agreement a file which contains a list of names of other files which are to processed. Its name is passed with a leading '@' to tell its special status, eg. CAT @FILES.LST FILES.LST is expected to contain a list of file names, separated by white space, ie. SPACEs or NEWLINEs, eg. FOO.DAT PROG.PAS WILLI.C WILLI.H It may even contain the names of other list files (which must start with '@' again). The latter feature is to be used carefully, though, because you are likely to lose control over what happens, if too many list files are involved. The processing of nested list files is as if they were inserted. Recursion is not allowed! You may of course mix file names, wildcards, and list file names in the command line, like CAT 1.DAT @1.LST 2.* @2.LST You may however NOT use wildcards as list file names, like @*.LST! * Currently my utilities cannot process files whose name begins with - (unless they are part of a wildcard like *.*), because they are interpreted as options. You must either use a wildcard or rename them first. 6 Source code availability --------------------------- I will not give away the sources of this software. If you want to program in TP, I point you to Timo Salmis collection of TP goodies (no source code, only TPUs) and David R. Conrads DRCPAS10 package (source code) - see credits. 7 Credits ---------- I would like to thank the following people for their support: * My wife Marita Breuer for testing the programs * Jouni Miettunen (jon@stekt.oulu.fi) for a lot of suggestions, critics, and discussions. I couldn't mention everything we talked about... * Edwin Schwartz (Niederzissener Strasse 12, 5479 Wehr) for his extremely helpful comments concerning the '- -' bug * Jari Kokko (jkokko@snakemail.hut.fi) for his comments. He had the idea of a simple command line oriented Disk Cataloger like DCAT * Prof. Timo Salmi (ts@uwasa.fi) of the University of Vaasa, Finland for making available useful tools to all of us. I also wish to thank him for his willingness to discuss problems concerning them. His TPUs can be anonymously ftp'ed from garbo.uwasa.fi (128.214.87.1) as /pc/ts/tspaXXYY.zip, where XX=version, YY=40,50,55,60 * Norbert Juffa for his great TURBO.TPL replacement * All the people who contacted me to report bugs * David R. Conrad for his DRCPAS10 package - I use several of his procedures. You get the package via ftp from wsmr-simtel20.army.mil (192.88.110.20) in the directory msdos/turbopas * O. Wehrheim for his dBaseTB unit from Software Journal 06/87 * Teddy Matsumoto for his excellent freeware DIET program * AC/DC, Metallica, Flotsam & Jetsam, and Slayer for their tunes :-) 8 Revision history ------------------- +-------------------------------------------+ | Version 3.1 --> 4.0 (released 05/01/1993) | +-------------------------------------------+ General (for all programs) -------------------------- * New utilities DCALC, DCAT, L, TAIL * Rewrote the basic layer; it's now faster and a bit smaller. Due to this major revision I renamed the programs to /2. The revision numbering starts with 1.0 again. -v reveals that the programs belong to RUTILS40 * Increased my documentation efforts. Not much, but it grows... * Added a new feature to the command line parser: ! may be used to pass arbitrary characters to the programs, eg. CR=!13 * Dropped the support of text files with LF-only separated lines (Unix format) in order to speed up most of the programs significantly * Fixed the '- -' bug which caused 'PROG - -' to terminate after reading the first input, and 'DIR | PROG - -' to terminate without reading from standard input. Thanks to Edwin Schwartz for his suggestions * Dropped the support of comments in the command line, because the problems were bigger than the benefits * The help pages are formatted \raggedright again (I changed my mind) * Modified the output of the debugging mode -*; added some more info ASET ---- * Huge enhancements, including an infix expression parser for parenthesed expressions of arbitrary complexity, several new functions, a powerful -e option (the old -e option is renamed to -p!) which lets ASET modify the DOS ERRORLEVEL (great for batch files!), the ability to load assignment sequences from a file, which can ease software configuration, and a new -n option which makes ASET run in 'compute only, do not SET' mode, which lets you use ASET as a kind of desktop calculator BANNER ------ * New option -C makes BANNER center the output CAL --- * CAL knows about the Gregorian Reformation, which removed 11 days from 3 Sep 1752 to 13 Sep 1752 (in America). CAL prints calenders for a complete year in three colums for Unix compatibility (thanks to Pingnan Yuan (yuan@geog.utoronto.ca) for pointing this out) CAT --- * CAT now operates for binary files, too; it starts in binary mode by default (ie., CAT fileA > fileB produces exact copies). Thanks to Jari Kokko (jkokko@snakemail.hut.fi) for his suggestions. CHMOD ----- * changed the % switch to ~ due to problems with shell variables (thanks to Jouni Miettunen (jon@stekt.oulu.fi) for bringing this to my attention) * supports directories with the new switches -d and -D now * increased security by introcducing the new -f switch which must be set for system files CUT --- * Bugfix in CUT: sometimes a range error was raised FILEINFO --> FILE ----------------- * FILEINFO is replaced by a new utility FILE, which works similar to the Unix command with the same name. A magic file is shipped with FILE. FILEINFO is no longer supported FMT --- * FMT inserts spaces (in blockset mode) deterministically now, ie. successive calls of FMT produce the same result GENOUT ------ * Bugfix: BAT output did not work * Added 4DOS support (the ECHO format is different from DOS) HEAD ---- * New option -q makes HEAD operate quietly NC --> NCONV ------------ * I renamed this program because its name collided with Norton Commander, I encourage you to rename it to a SHORT name (I use NC as before) STRINGS ------- * Bugfix: readable strings with a length of 255 characters were preceded by one non-printing character * New option -o can produce binary, decimal, octal, and hex offsets now TEE --- * TEE works for binary files now WC -- * WC -u is default rather than WC -n +-------------------------------------------+ | Version 3.0 --> 3.1 (released 01/05/1993) | +-------------------------------------------+ General (for all programs) -------------------------- * New utility MCOL * Bugfix: the handling of directory name parameters failed for paths like C:\ (thanks to Timo Salmi for pointing this out) * Some internal bugfixes * FMTs blockset facility is internally used to format the help pages ASET ---- * ASET reports missing environment space now BANNER ------ * New options -s and -S invoke slanted and backslanted mode * Bugfix in BANNER: Z and Y were swapped HEAD ---- * HEAD reports ==> (stdin) <== correctly FMT --- * FMT simplifies ranges of whitespace before formatting a line (which produces nicer results), unless -p is specified WC -- * New option -m determines the length of the longest line +------------------------------------------------+ | Version 3.0 beta --> 3.0 (released 08/05/1992) | +------------------------------------------------+ General (for all programs) -------------------------- * New utilities CAL, CUT, and FMT ASET ---- * New opcodes BOOTDRIVE, BUFFERS, and FILES for ASET CAT --- * Bugfix: supress mode was sometimes on w/o option -s DETAB/ENTAB ----------- * New options -l and -r for leading tabs and quotes HD -- * HD -l defaults to HD -l20 (one page) LOCASE/UPCASE ------------- * New option -r for quotes NODUP ----- * Removed option -w for NODUP again, because there was no meaningful way to decide whether to apply it before or after the position calculation PICINFO --> FILEINFO -------------------- * Replaced PICINFO by the more generic FILEINFO. PICINFO is no longer supported TEE --- * Bugfix: it sometimes didn't accept input filenames +------------------------------------------------+ | Version 2.0 --> 3.0 beta (released 07/03/1992) | +------------------------------------------------+ General (for all programs) -------------------------- * New utilities ASET, WC, BANNER, CHMOD, HEAD, GENOUT, STRINGS * Usage of a read buffer for input from files speeds up most of the utilities significantly * All utilities recognize CR/LF separated text files as well as LF-only separated text files * All programs display a help screen, if called without arguments * New commandline parser * New option -u for several programs generates unix-like output * New option -* for all programs generate debugging information * several bug fixes CAT --- * New options -b, -e, -n, -s, -t for CAT make it behave (nearly) like unix cat HD -- * New option -o allows starting offset specification NODUP ----- * New option -w allows whitespace exclusion PICINFO/WC ---------- * PICINFO recognizes TIFF MM and PIC now * new dirname facility for WC and PICINFO +-------------------------------------------+ | Version 1.0 --> 2.0 (released 04/28/1992) | +-------------------------------------------+ General (for all programs) -------------------------- * New utilities HD, TEE, NC, and CAT * Bug fix: wildcards now work on other directories also +-----------------------------------+ | Version 1.0 (released 04/14/1992) | +-----------------------------------+ * Initial version 9 How to contact me -------------------- Mail: Richard Breuer Brunssumstrasse 6 5100 Aachen (after Jul 1, 1993: 52074 Aachen) Germany Europe or: Richard Breuer ComConsult GmbH Pascalstr. 25 5100 Aachen (after Jul 1, 1993: 52076 Aachen) Germany Europe Phone: +49 241 85605 private +49 2408 149 01 job +49 2408 149 149 fax Email: ricki@pool.informatik.rwth-aachen.de (Preferred!) Please note that my private address will change sometime in 1993. I will keep my e-mail address some time longer. If your e-mail fails, try marita@rwthi3.informatik.rwth-aachen.de instead. If I find the time (I got some ideas...) I will add some more utilities. If you like the RUTILS package, drop me an e-mail or a postcard from where U live (It would be nice to get some feedback - Thanks to those of you, who replied!). Ricki $Id: readme.txt 1.20 1993/05/01 10:03:24 Ricki Exp $